-- 2022-7-28

---[[
    -- table.insert 向序列的指定位置插入一个元素，其他元素依次后移
    t = {10,20,30}
    table.insert(t,1,111)
    for k, v in ipairs(t) do
        print(k,v)
    end
    -- 三个参数的指定索引的前面插入，两个参数的在列表最后面插入
    table.insert(t,2)
    table.insert(t,3)
    for k, v in ipairs(t) do
        print(k,v)
    end
    -- 函数table.remove删除并返回指定位置的元素，然后将后面的元素向前移动填充，删除元素后造成的空洞
    x = table.remove(t,1)
    print("x is ",x)
    for k, v in ipairs(t) do
        print(k,v)
    end
    -- 两个参数指定位置，一个参数删除最后面的
    x = table.remove(t)
    print("x is ",x)
    for k, v in ipairs(t) do
        print(k,v)
    end

    -- 借助这两个函数，我们可以很容易的实现栈，队列，双端队列

    -- Lua5.3 对于表中元素的移动引入了一个更通用的函数table.move(a,f,e,t)
    print("--------")
    new = table.move(t,1,#t,2)
    for k, v in ipairs(t) do
        print(k,v)
    end
    for k, v in ipairs(new) do
        print(k,v)
    end
    -- 应该注意的是移动实际上是copy，而不是真正的移动

    -- table.move()五个参数的形式，将其从a表移动到b表的指定位置并返回b的地址
    print("--------")
    b = {}
    new2 = table.move(t,2,#t,1,b)
    for k, v in ipairs(b) do
        print(k,v)
    end
    for k, v in ipairs(new2) do
        print(k,v)
    end

    -- 其他table函数
    -- table.concat列出table中数组部分从下表start到end的所有元素，元素中间以字符sep隔开，默认字符为空字符，其中table必填其余可以不填
    str = table.concat(t) -- 返回字符串，无间隔
    print(str)
    str = table.concat(t," ",1,#t)
    print(str)

    -- table.pack 键值为1，2，3.... 对应的value为括号的内容
    tb = table.pack(1,23,4,5,6,7,8)
    for k, v in ipairs(tb) do
        print(k,v)
    end

    -- table.sort 对列表排序
    sor = {[2] = "2",[1] = "1",[4] = "4",[3] = "3"}
    table.sort(sor)
    print("--------")
    for k, v in ipairs(sor) do
        print(k,v)
    end

    -- table.unpack 从一个表中返回多个值
    x = {}
    x,y = table.unpack(sor)
    print("-------")
    print(x,y)
    x,y = table.unpack(sor,2,3)
    print(x,y)
--]]

---[[练习题
    s = "m"
    m = "s"
    t = {s = "m",[s] = m}
    print(t.s,t[s],t[t.s])

    a = {}
    a.a = a -->a{"a" = a}
    -- 求a.a.a.a?
    print(a,a.a,a.a.a.a)
    a.a.a.a = 3 --> 由于前面是地址所以会一直访问下去直到最后一个，想当于a.a 第一个是地址，第二个是以a的地址为字符串类型的键值
    print((a.a))
    -- print(a.a.a) --> a.a已经是number类型了,所以点不出来下一个了
--]]